在 Android 開發中,我們經常需要保存一些輕量級的資料,例如使用者的設定、登入狀態或是應用的偏好選項。這些資料通常不需要使用資料庫來保存,因為它們很小、也不需要複雜的數據結構來存取。在這樣的情境下,SharedPreferences
是一個非常適合的解決方案。
SharedPreferences
是 Android 提供的一種輕量級數據儲存方法,它可以讓我們以鍵值對的方式存取數據。我們可以用它來保存各種型態的數據,例如字串、整數、布林值等等。最常見的應用場景包括:
在使用 SharedPreferences 時,主要分為三個步驟:
我們可以通過 getSharedPreferences()
取得 SharedPreferences
的實例。這個方法需要兩個參數:
MODE_PRIVATE
,表示只有這個應用程式可以存取這組資料。MODE_APPEND
如果檔案已經存在,則在檔案後追加數據,否則會建立新檔案。這個模式通常與 FileOutputStream
結合使用,而不是 SharedPreferences
。但在 SharedPreferences
中,它可以作為過去的兼容性選項,現在幾乎不再使用這個模式。SharedPreferences sharedPreferences = getSharedPreferences("UserPrefs", MODE_PRIVATE);
接下來,我們需要透過 edit()
方法來編輯 SharedPreferences
的內容,然後使用 putString()
、putInt()
、putBoolean()
等方法來存入數據,最後使用 apply()
或 commit()
來提交變更。
讀取資料也非常簡單,直接使用 getString()
、getBoolean()
、getInt()
等方法來取得相應的數據。
String username = sharedPreferences.getString("username", "defaultUser");
boolean isLoggedIn = sharedPreferences.getBoolean("isLoggedIn", false);
下面是一個實際應用 SharedPreferences
來保存和讀取使用者名稱以及登入狀態的範例。
package com.example.sharedpreferencesdemo;
import android.content.SharedPreferences;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Toast;
import androidx.appcompat.app.AppCompatActivity;
public class MainActivity extends AppCompatActivity {
private EditText usernameEditText;
private Button saveButton, loadButton;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
// 初始化 UI 元件
usernameEditText = findViewById(R.id.username_et);
saveButton = findViewById(R.id.save_btn);
loadButton = findViewById(R.id.load_btn);
// 保存按鈕的點擊事件
saveButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
String username = usernameEditText.getText().toString();
saveData(username);
}
});
// 加載按鈕的點擊事件
loadButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
loadData();
}
});
}
// 保存資料到 SharedPreferences
private void saveData(String username) {
SharedPreferences sharedPreferences = getSharedPreferences("UserPrefs", MODE_PRIVATE);
SharedPreferences.Editor editor = sharedPreferences.edit();
editor.putString("username", username);
editor.apply();
Toast.makeText(this, "資料已保存", Toast.LENGTH_SHORT).show();
}
// 從 SharedPreferences 加載資料
private void loadData() {
SharedPreferences sharedPreferences = getSharedPreferences("UserPrefs", MODE_PRIVATE);
String savedUsername = sharedPreferences.getString("username", "尚未保存使用者名稱");
Toast.makeText(this, "保存的使用者名稱: " + savedUsername, Toast.LENGTH_SHORT).show();
}
}
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
android:padding="16dp">
<EditText
android:id="@+id/username_et"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:hint="請輸入使用者名稱" />
<Button
android:id="@+id/save_btn"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="保存使用者名稱" />
<Button
android:id="@+id/load_btn"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="加載使用者名稱" />
</LinearLayout>
成果圖如下
透過這個範例,我們可以看到如何使用 SharedPreferences
來保存和讀取應用程式中的輕量級資料。它的使用方式非常簡單,不僅適合保存應用設置,也可以用來保存一些應用中的臨時狀態。SharedPreferences
的好處在於它無需複雜的設定,且在小型資料存取中非常高效。